/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package InterfaceGraphique.commonPannel;

import InterfaceGraphique.BoiteMessage;
import InterfaceGraphique.FenJeuEntrer;
import InterfaceGraphique.MainApplication;
import InterfaceGraphique.exceptions.PopupException;
import cartes.Action;
import cartes.Carte;
import common.Constantes;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import plateau.Joueur;

/**
 *
 * @author Arthur
 */
public class PanMain extends PanListeCarte {
    JPanel pButtons;
    JButton bEquiper;
    JButton bUtiliser;
    JButton bDefausser;
    JScrollPane jsTest;

    public PanMain(String desc, int width, int height, int pan, JFrame parent) {
        super(desc, width, height, pan, parent);
        initButtons();
    }
    
    public PanMain(ArrayList<Carte> cartes, String desc, int width, int height, int pan, JFrame parent, boolean selectable) {
        super(cartes, desc, width, height, pan, parent, selectable); 
        initButtons();
    }
    
    public void initButtons() {
        this.pCartes.setPreferredSize(new Dimension(width - 45, height - 100 ));
        
        this.jsTest = new JScrollPane(this.pCartes);
        this.jsTest.setPreferredSize(new Dimension(width - 20, height - 90));
        this.jsTest.setBackground(new java.awt.Color(110,48,34));
        this.add(jsTest);
        //this.pCartes.setPreferredSize(new Dimension(width*2, height*2 ));
        //this.jsTest.setMaximumSize(new Dimension(width - 20, height - 100));
        
        // Les boutons
        this.pButtons = new JPanel();
        this.pButtons.setPreferredSize(new Dimension(310, 60));
        this.pButtons.setOpaque(false);
        this.add(this.pButtons);
        
        this.bEquiper = new JButton("Equiper");
        this.bEquiper.setPreferredSize(new Dimension(95, 40));
        this.bEquiper.setEnabled(false);
        this.pButtons.add(this.bEquiper);
        
        this.bUtiliser = new JButton("Utiliser");
        this.bUtiliser.setPreferredSize(new Dimension(95, 40));
        this.bUtiliser.setEnabled(false);
        this.pButtons.add(this.bUtiliser);
        
        this.bDefausser = new JButton("Défausser");
        this.bDefausser.setPreferredSize(new Dimension(95, 40));
        this.bDefausser.setEnabled(false);
        this.pButtons.add(this.bDefausser);
        
        bEquiper.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bEquiperActionPerformed(evt);
            }
        });
        
        bUtiliser.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bUtiliserActionPerformed(evt);
            }

        });
        
        bDefausser.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bDefausserActionPerformed(evt);
            }
        });
        
    }
    
    public void changeBoutonEquiper(boolean visible) {
        bEquiper.setEnabled(visible);    
    }
    
    public void changeBoutonDefausser(boolean visible) {
        bDefausser.setEnabled(visible);    
    }
    
    public void changeBoutonUtiliser(boolean visible) {
        bUtiliser.setEnabled(visible);    
    }
    
    public void bEquiperActionPerformed(java.awt.event.ActionEvent evt) {

	// TODO add your handling code here:  
	Joueur j = MainApplication.getJoueurEnCours(); 
	try {             
		j.equiper(this.getSelected());       
		j.defausserCarteMain(this.getSelected()); 
		this.changeBoutonEquiper(false); 
                this.changeBoutonDefausser(false); 
		((FenJeuEntrer) this.parent).upCartes(j);         
	} 
	catch (PopupException e) {    
		new BoiteMessage(e.getDescription());    
	}    
    }
    
    public void bDefausserActionPerformed(java.awt.event.ActionEvent evt) {

	// TODO add your handling code here:  
	Joueur j = MainApplication.getJoueurEnCours(); 
	j.defausserCarteMain(this.getSelected());
        this.changeBoutonEquiper(false);     
        this.changeBoutonDefausser(false); 
	((FenJeuEntrer) this.parent).upCartes(j); 
    }
    
    public void bUtiliserActionPerformed(ActionEvent evt) {
        try {
            Carte c = this.getSelected();
            if( c.getClass().getName().equals(Constantes.C_MALEDICTION) ) {                
                // Créer et appeler fenetre
                MainApplication.showChoixJoueur(c);
            }
            if( c.getClass().getName().equals(Constantes.C_ACTION)) {
                Action a = (Action) c;
                if( a.isSelfUse() ) {
                    int n = MainApplication.getJoueurEnCours().getNiveau();
                    a.utiliser(MainApplication.getJoueurEnCours());
                    if( MainApplication.getJoueurEnCours().getNiveau() != n ) {
                        MainApplication.getJoueurEnCours().defausserCarteMain(c);                
                        ((FenJeuEntrer) MainApplication.getFenetre(Constantes.FEN_JEU_ENTRER)).upJoueur(MainApplication.getJoueurEnCours());
                    }
                }
                else {
                    MainApplication.showChoixJoueur(c);
                }
            }
        }
        catch(Exception e) {
            new BoiteMessage(e.getMessage());
        }
    }
    
    public void setCartes(ArrayList<Carte> cartes, boolean selectable) {
        int addSize = (int) Math.ceil((float) (cartes.size() / 2.0)) - 3;
        this.pCartes.setPreferredSize(new Dimension(width - 45, (height - 100) + (200 * addSize) ));       
        super.setCartes(cartes, selectable);
        
    }
    
    public void setSelected(PanCarte c) {
        if(c != null ) {
            for (Map.Entry<PanCarte, Carte> e : ((HashMap<PanCarte, Carte>) this.cartes).entrySet()) {
                if(! e.getKey().equals(c) )
                    e.getKey().setSelected(false);  
                else { 
                    this.changeBoutonDefausser(true);
                    if( e.getValue().equipable() )
                       this.changeBoutonEquiper(true);
                    else
                       this.changeBoutonEquiper(false);
                    if( e.getValue().utilisable() ) 
                       this.changeBoutonUtiliser(true);
                    else
                       this.changeBoutonUtiliser(false);
                }
            }
        }
        else {
            this.changeBoutonEquiper(false);
            this.changeBoutonUtiliser(false);
            this.changeBoutonDefausser(false);
        }
    }
    
}
